package com.kedacom.ctsp.authority.service;

import com.kedacom.ctsp.authority.dto.UserImportDTO;
import com.kedacom.ctsp.authority.entity.User;
import com.kedacom.ctsp.authority.vo.AuthorityImportExcelResultVo;
import com.kedacom.ctsp.authz.entity.AuthPerson;
import com.kedacom.ctsp.authz.entity.AuthRole;
import com.kedacom.ctsp.authz.entity.AuthUser;
import com.kedacom.ctsp.web.service.CrudService;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 基础用户service
 *
 * @author
 */
public interface UserService extends CrudService<User, String> {


    /***
     * 根据用户人员id获取用户信息
     * @param personId
     * @return
     */
    List<User> selectByPersionId(String personId);

    /**
     * 检测登录用户的状态是否可以登录
     *
     * @param userEntity
     * @return
     */
    default boolean checkLoginUserStatus(User userEntity) {
        return true;
    }

    /**
     * 根据用户名查询
     *
     * @param username
     * @return
     */
    User selectByUsername(String username);

    /**
     * 更新密码
     *
     * @param userId
     * @param oldPassword
     * @param newPassword
     * @return
     */
    String updatePassword(String userId, String oldPassword, String newPassword);

    /**
     * 更新密码
     *
     * @param userId
     * @param newPassword
     * @return
     */
    String resetPassword(String userId, String newPassword);

    /**
     * 导入 用户
     * <p>
     * 1    人员编号验证错误
     * 该人员编号不存在
     * 2    人员编号和人员姓名不一致
     * 该人员编号和人员姓名不一致
     * 3    人员编号和人员归属部门ID不符
     * 该人员编号和所属部门不对应
     * 4    用户名不唯一（验证与已存在用户名是否重复）
     * 用户名和已有用户名重复
     * 5    用户名不唯一（验证导入表格内是否重复）
     * 本次导入的用户名存在重复用户名
     * 6    用户名不符合系统规范【规范待定】
     * 用户名不符合系统规范
     * 7    权限角色ID不存在
     * 【角色ID】权限角色不存在
     *
     * @param userDtos
     * @return
     * @deprecated 将要废弃, 等重构好的方法测试完毕之后删除
     */
    List<? extends UserImportDTO> importUsers(List<? extends UserImportDTO> userDtos);

    // 重构
    AuthorityImportExcelResultVo importUsers(MultipartFile file, HttpServletRequest request) throws Exception;

    String getDeptIdByUserId(String userId);

    AuthPerson getAuthPersonByUser(AuthUser authUser);

    Set<AuthRole> getAuthRolesByUser(String uid);

    Map<String, Set<String>> getAuthRolesByUser(Collection<String> uids);


    Map<String, String> getDeptIdByUserIds(Collection<String> userIds);

}
